home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #12 / Amiga Plus CD - 2002 - No. 12.iso / AmigaOS / Aplus_Dev / AP-Website / download / pgp / pgp5gui-174b.lha / PGP5GUI-Src.lha / PGP5GUI-Src / PGP5GUI.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-06-23  |  25.1 KB  |  977 lines

  1. /*
  2. ** PGP5GUI - A GUI using Magic User Interface v3.8
  3. **
  4. ** Copyright 23-JUNE-1998 by Stefan Zakarias, All Rights Reserved.
  5. **
  6. ** This source code is released as FREEWARE - Use it for whatever you like,
  7. ** as long as NO financial reward is gained by you for such usage.
  8. **
  9. ** If you use any parts of the this source code for anything, give ME credit
  10. ** wherever credit is due, please ;-)
  11. */
  12.  
  13. #ifndef MAKE_ID
  14. #define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d))
  15. #endif
  16.  
  17. /* Libraries */
  18. #include <libraries/mui.h>
  19. #include <libraries/gadtools.h> /* for Barlabel in MenuItem */
  20.  
  21. #include <workbench/workbench.h>
  22. #include <workbench/startup.h>
  23.  
  24. /* Prototypes */
  25. #ifdef __GNUC__
  26. #include <clib/muimaster_protos.h>
  27. #include <proto/alib.h>
  28. #else
  29. #include <proto/muimaster.h>
  30. #include <clib/alib_protos.h>
  31. #include <proto/dos.h>
  32. #endif
  33.  
  34. #include <exec/memory.h>
  35.  
  36. #include <proto/exec.h>
  37.  
  38. #include "PGP5GUI.h"
  39.  
  40. #ifndef __GNUC__
  41. #define REG(x) register __ ## x
  42. #endif
  43.  
  44. extern LONG prev_EncClipMode, prev_DecClipMode, prev_SigClipMode, prev_AddKeysClipMode;
  45.  
  46. extern LONG GetCycle(Object *obj);
  47.  
  48. /*
  49. ** A function used by the Drag'n'Drop feature.
  50. ** We get the details we need about the AppMessage sent to us here and
  51. ** update the string gadget with the name of the file dropped on us.
  52. ** This particular function will only allow one object to be dropped on the
  53. ** on the string gadget - the last one selected!
  54. */
  55. static __saveds __asm LONG
  56. AppMsgFunc(REG(a2) APTR obj, REG(a1) struct AppMessage **x)
  57. {
  58.     struct WBArg *ap;
  59.     struct AppMessage *amsg = *x;
  60.     int i;
  61.     static char buf[256];
  62.  
  63.     for (ap=amsg->am_ArgList, i=0; i<amsg->am_NumArgs; i++,ap++)
  64.     {
  65.         NameFromLock(ap->wa_Lock, buf, sizeof(buf));
  66.         AddPart(buf, ap->wa_Name, sizeof(buf));
  67.  
  68.         if (*(ap->wa_Name))
  69.             set(obj,MUIA_String_Contents,buf);
  70.         else
  71.             DisplayBeep(0);
  72.     }
  73.  
  74.     return(0);
  75. }
  76.  
  77. static const struct Hook AppMsgHook =
  78. {
  79.     { NULL,NULL },
  80.     (VOID *)AppMsgFunc,
  81.     NULL,
  82.     NULL
  83. };
  84.  
  85. struct ObjApp *
  86. CreateApp(void)
  87. {
  88.     struct ObjApp * ObjectApp;
  89.  
  90.     APTR GROUP_PGP5GUI, GR_Encrypt, GR_Decrypt, GR_Sign;
  91.     APTR GR_Keys_ADD, GR_Keys_EDIT, GR_Keys_MISC;
  92.     APTR GR_Encrypt_DOIT, GR_Decrypt_DOIT, GR_Sign_DOIT, GR_KEYADD;
  93.  
  94.     APTR GR_KEYCHECK, GR_KEYDISABLE, GR_KEYEDIT, GR_KEYREMOVE, GR_REMOVESIG;
  95.     APTR GR_REMOVEUID, GR_KEYREVOKE, GR_KEYREVSIG, GR_KEYSIGN, GR_KEYSIGNKEY;
  96.  
  97.     APTR GR_KEYGEN, GR_KEYEXTRACT, GR_KEYLIST, GR_KEYLIST_UPDATE;
  98.  
  99.     APTR REC_Dec1, REC_Dec2, REC_Dec3;
  100.     APTR REC_Keys_Add1;
  101.  
  102.     if (!(ObjectApp = AllocVec(sizeof(struct ObjApp),MEMF_PUBLIC|MEMF_CLEAR)))
  103.         return(NULL);
  104.  
  105.     ObjectApp->STR_TX_Status = "\33cInitializing";
  106.  
  107.     ObjectApp->STR_GR_Functions[0] = "Encrypt";
  108.     ObjectApp->STR_GR_Functions[1] = "Decrypt";
  109.     ObjectApp->STR_GR_Functions[2] = "Sign";
  110.     ObjectApp->STR_GR_Functions[3] = "Keys";
  111.     ObjectApp->STR_GR_Functions[4] = NULL;
  112.  
  113.     ObjectApp->CY_Encrypt_MODEContent[0] = "Public Key Encrypt";
  114.     ObjectApp->CY_Encrypt_MODEContent[1] = "Public Key Encrypt And Sign";
  115.     ObjectApp->CY_Encrypt_MODEContent[2] = "Conventional Encrypt (IDEA)";
  116.     ObjectApp->CY_Encrypt_MODEContent[3] = NULL;
  117.  
  118.     ObjectApp->CY_Encrypt_USEARMORContent[0] = "No ASCII Armor";
  119.     ObjectApp->CY_Encrypt_USEARMORContent[1] = "Use ASCII Armor";
  120.     ObjectApp->CY_Encrypt_USEARMORContent[2] = NULL;
  121.  
  122.     ObjectApp->CY_Encrypt_TEXTMODEContent[0] = "Text Mode OFF";
  123.     ObjectApp->CY_Encrypt_TEXTMODEContent[1] = "Text Mode ON";
  124.     ObjectApp->CY_Encrypt_TEXTMODEContent[2] = NULL;
  125.  
  126.     ObjectApp->CY_Encrypt_CLIPContent[0] = "Encrypt From File To Default";
  127.     ObjectApp->CY_Encrypt_CLIPContent[1] = "Encrypt From File To Clip";
  128.     ObjectApp->CY_Encrypt_CLIPContent[2] = "Encrypt From Clip To File";
  129.     ObjectApp->CY_Encrypt_CLIPContent[3] = "Encrypt From Clip To Clip";
  130.     ObjectApp->CY_Encrypt_CLIPContent[4] = NULL;
  131.  
  132.     ObjectApp->CY_Decrypt_OUTTYPEContent[0] = "Output From File To Default";
  133.     ObjectApp->CY_Decrypt_OUTTYPEContent[1] = "Output From File To Pager";
  134.     ObjectApp->CY_Decrypt_OUTTYPEContent[2] = "Output From File To Clip";
  135.     ObjectApp->CY_Decrypt_OUTTYPEContent[3] = "Output From Clip To File";
  136.     ObjectApp->CY_Decrypt_OUTTYPEContent[4] = "Output From Clip To Pager";
  137.     ObjectApp->CY_Decrypt_OUTTYPEContent[5] = "Output From Clip To Clip";
  138.     ObjectApp->CY_Decrypt_OUTTYPEContent[6] = NULL;
  139.  
  140.     ObjectApp->CY_Sign_DETACHContent[0] = "Detached Signature OFF";
  141.     ObjectApp->CY_Sign_DETACHContent[1] = "Detached Signature ON";
  142.     ObjectApp->CY_Sign_DETACHContent[2] = NULL;
  143.  
  144.     ObjectApp->CY_Sign_MODEContent[0] = "No ASCII Armor";
  145.     ObjectApp->CY_Sign_MODEContent[1] = "Use ASCII Armor";
  146.     ObjectApp->CY_Sign_MODEContent[2] = NULL;
  147.  
  148.     ObjectApp->CY_Sign_TEXTMODEContent[0] = "Text Mode OFF";
  149.     ObjectApp->CY_Sign_TEXTMODEContent[1] = "Text Mode ON";
  150.     ObjectApp->CY_Sign_TEXTMODEContent[2] = NULL;
  151.  
  152.      ObjectApp->CY_Sign_CLIPContent[0] = "Sign From File To Default";
  153.     ObjectApp->CY_Sign_CLIPContent[1] = "Sign From File To Clip";
  154.     ObjectApp->CY_Sign_CLIPContent[2] = "Sign From Clip To File";
  155.     ObjectApp->CY_Sign_CLIPContent[3] = "Sign From Clip To Clip";
  156.     ObjectApp->CY_Sign_CLIPContent[4] = NULL;
  157.  
  158.     ObjectApp->STR_GR_Keys[0] = "Add";
  159.     ObjectApp->STR_GR_Keys[1] = "Edit";
  160.     ObjectApp->STR_GR_Keys[2] = "Misc";
  161.     ObjectApp->STR_GR_Keys[3] = NULL;
  162.  
  163.     ObjectApp->CY_KeysAdd_CLIPContent[0] = "Add Key(s) From File";
  164.     ObjectApp->CY_KeysAdd_CLIPContent[1] = "Add Key(s) From Clip";
  165.     ObjectApp->CY_KeysAdd_CLIPContent[2] = NULL;
  166.  
  167.     ObjectApp->CY_Encrypt_MODE = CycleObject,
  168.         MUIA_ObjectID, 1,
  169.         MUIA_HelpNode, "ENCRYPT_MODE",
  170.         MUIA_Cycle_Entries, ObjectApp->CY_Encrypt_MODEContent,
  171.     End;
  172.  
  173.     ObjectApp->CY_Encrypt_USEARMOR = CycleObject,
  174.         MUIA_ObjectID, 2,
  175.         MUIA_HelpNode, "ASCII_ARMOR",
  176.         MUIA_Cycle_Entries, ObjectApp->CY_Encrypt_USEARMORContent,
  177.     End;
  178.  
  179.     ObjectApp->CY_Encrypt_TEXTMODE = CycleObject,
  180.         MUIA_ObjectID, 3,
  181.         MUIA_HelpNode, "TEXT_MODE",
  182.         MUIA_Cycle_Entries, ObjectApp->CY_Encrypt_TEXTMODEContent,
  183.     End;
  184.  
  185.     ObjectApp->CY_Encrypt_CLIP = CycleObject,
  186.         MUIA_ObjectID, 4,
  187.         MUIA_HelpNode, "Encrypt_CLIP",
  188.         MUIA_Cycle_Entries, ObjectApp->CY_Encrypt_CLIPContent,
  189.     End;
  190.  
  191.     ObjectApp->STR_PA_Encrypt_FROMFILE = StringObject,
  192.         MUIA_ObjectID, 6,
  193.         MUIA_Frame, MUIV_Frame_String,
  194.         MUIA_HelpNode, "FILE_ENCRYPT",
  195.         MUIA_String_MaxLen, 256,
  196.     End;
  197.  
  198.     ObjectApp->IM_Pop_Enc = ImageObject,
  199.         MUIA_Image_Spec, 19,
  200.         MUIA_InputMode, MUIV_InputMode_RelVerify,
  201.         MUIA_Weight, 0,
  202.         MUIA_Frame, MUIV_Frame_ImageButton,
  203.         MUIA_Image_FreeVert, TRUE,
  204.         MUIA_Image_FreeHoriz, TRUE,
  205.         MUIA_FixHeight, 10,
  206.         MUIA_FixWidth, 8,
  207.         MUIA_HelpNode, "Pop_ASLFile",
  208.     End;
  209.  
  210.     ObjectApp->GR_Enc_File = GroupObject,
  211.         MUIA_Frame, MUIV_Frame_Group,
  212.         MUIA_FrameTitle, "File To Encrypt",
  213.         MUIA_Group_Columns, 2,
  214.         Child, ObjectApp->STR_PA_Encrypt_FROMFILE,
  215.         Child, ObjectApp->IM_Pop_Enc,
  216.     End;
  217.  
  218.     ObjectApp->BT_Encrypt_DOIT = SimpleButton("Start Encryption!");
  219.  
  220.     GR_Encrypt_DOIT = GroupObject,
  221.         MUIA_HelpNode, "ENCRYPT_FILE",
  222.         MUIA_Group_Columns, 1,
  223.         Child, ObjectApp->BT_Encrypt_DOIT,
  224.     End;
  225.  
  226.     GR_Encrypt = GroupObject,
  227.         MUIA_HelpNode, "Encrypt_Group",
  228.         MUIA_Frame, MUIV_Frame_Group,
  229.         MUIA_FrameTitle, "File Encryption",
  230.         Child, ObjectApp->CY_Encrypt_MODE,
  231.         Child, ObjectApp->CY_Encrypt_USEARMOR,
  232.         Child, ObjectApp->CY_Encrypt_TEXTMODE,
  233.         Child, ObjectApp->CY_Encrypt_CLIP,
  234.         Child, ObjectApp->GR_Enc_File,
  235.         Child, GR_Encrypt_DOIT,
  236.     End;
  237.  
  238.     REC_Dec1 = RectangleObject,
  239.         MUIA_Rectangle_HBar, TRUE,
  240.         MUIA_FixHeight, 8,
  241.     End;
  242.  
  243.     ObjectApp->CY_Decrypt_OUTTYPE = CycleObject,
  244.         MUIA_ObjectID, 10,
  245.         MUIA_HelpNode, "DECRYPT_OUT",
  246.         MUIA_Cycle_Entries, ObjectApp->CY_Decrypt_OUTTYPEContent,
  247.     End;
  248.  
  249.     REC_Dec2 = RectangleObject,
  250.         MUIA_Rectangle_HBar, TRUE,
  251.         MUIA_FixHeight, 8,
  252.     End;
  253.  
  254.     ObjectApp->STR_PA_Decrypt_TOFILE = StringObject,
  255.         MUIA_ObjectID, 16,
  256.         MUIA_Frame, MUIV_Frame_String,
  257.         MUIA_HelpNode, "FILE_DECRYPT",
  258.         MUIA_String_MaxLen, 256,
  259.     End;
  260.  
  261.     ObjectApp->IM_Pop_Dec = ImageObject,
  262.         MUIA_Image_Spec, 19,
  263.         MUIA_InputMode, MUIV_InputMode_RelVerify,
  264.         MUIA_Weight, 0,
  265.         MUIA_Frame, MUIV_Frame_ImageButton,
  266.         MUIA_Image_FreeVert, TRUE,
  267.         MUIA_Image_FreeHoriz, TRUE,
  268.         MUIA_FixHeight, 10,
  269.         MUIA_FixWidth, 8,
  270.         MUIA_HelpNode, "Pop_ASLFile",
  271.     End;
  272.  
  273.     ObjectApp->GR_Dec_File = GroupObject,
  274.         MUIA_Frame, MUIV_Frame_Group,
  275.         MUIA_FrameTitle, "File To Decrypt Or Verify",
  276.         MUIA_Group_Columns, 2,
  277.         Child, ObjectApp->STR_PA_Decrypt_TOFILE,
  278.         Child, ObjectApp->IM_Pop_Dec,
  279.     End;
  280.  
  281.     REC_Dec3 = RectangleObject,
  282.         MUIA_Rectangle_HBar, TRUE,
  283.         MUIA_FixHeight, 8,
  284.     End;
  285.  
  286.     ObjectApp->BT_Decrypt_DOIT = SimpleButton("Start Decrypt/Verify!");
  287.  
  288.     GR_Decrypt_DOIT = GroupObject,
  289.         MUIA_HelpNode, "DECRYPT_FILE",
  290.         MUIA_Group_Columns, 1,
  291.         Child, ObjectApp->BT_Decrypt_DOIT,
  292.     End;
  293.  
  294.     GR_Decrypt = GroupObject,
  295.         MUIA_HelpNode, "Decrypt_Group",
  296.         MUIA_Frame, MUIV_Frame_Group,
  297.         MUIA_FrameTitle, "Decrypt/Verify",
  298.         Child, REC_Dec1,
  299.         Child, ObjectApp->CY_Decrypt_OUTTYPE,
  300.         Child, REC_Dec2,
  301.         Child, ObjectApp->GR_Dec_File,
  302.         Child, REC_Dec3,
  303.         Child, GR_Decrypt_DOIT,
  304.     End;
  305.  
  306.     ObjectApp->CY_Sign_DETACH = CycleObject,
  307.         MUIA_ObjectID, 20,
  308.         MUIA_HelpNode, "SIGN_DETACH",
  309.         MUIA_Cycle_Entries, ObjectApp->CY_Sign_DETACHContent,
  310.     End;
  311.  
  312.     ObjectApp->CY_Sign_MODE = CycleObject,
  313.         MUIA_ObjectID, 21,
  314.         MUIA_HelpNode, "ASCII_ARMOR",
  315.         MUIA_Cycle_Entries, ObjectApp->CY_Sign_MODEContent,
  316.     End;
  317.  
  318.     ObjectApp->CY_Sign_TEXTMODE = CycleObject,
  319.         MUIA_ObjectID, 22,
  320.         MUIA_HelpNode, "TEXT_MODE",
  321.         MUIA_Cycle_Entries, ObjectApp->CY_Sign_TEXTMODEContent,
  322.     End;
  323.  
  324.     ObjectApp->CY_Sign_CLIP = CycleObject,
  325.         MUIA_ObjectID, 23,
  326.         MUIA_HelpNode, "Sign_CLIP",
  327.         MUIA_Cycle_Entries, ObjectApp->CY_Sign_CLIPContent,
  328.     End;
  329.  
  330.     ObjectApp->STR_PA_Sign_POPFILE = StringObject,
  331.         MUIA_ObjectID, 26,
  332.         MUIA_Frame, MUIV_Frame_String,
  333.         MUIA_HelpNode, "FILE_SIGN",
  334.         MUIA_String_MaxLen, 256,
  335.     End;
  336.  
  337.     ObjectApp->IM_Pop_Sig = ImageObject,
  338.         MUIA_Image_Spec, 19,
  339.         MUIA_InputMode, MUIV_InputMode_RelVerify,
  340.         MUIA_Weight, 0,
  341.         MUIA_Frame, MUIV_Frame_ImageButton,
  342.         MUIA_Image_FreeVert, TRUE,
  343.         MUIA_Image_FreeHoriz, TRUE,
  344.         MUIA_FixHeight, 10,
  345.         MUIA_FixWidth, 8,
  346.         MUIA_HelpNode, "Pop_ASLFile",
  347.     End;
  348.  
  349.     ObjectApp->GR_Sig_File = GroupObject,
  350.         MUIA_Frame, MUIV_Frame_Group,
  351.         MUIA_FrameTitle, "File To Sign",
  352.         MUIA_Group_Columns, 2,
  353.         Child, ObjectApp->STR_PA_Sign_POPFILE,
  354.         Child, ObjectApp->IM_Pop_Sig,
  355.     End;
  356.  
  357.     ObjectApp->BT_Sign_DOIT = SimpleButton("Start Signing!");
  358.  
  359.     GR_Sign_DOIT = GroupObject,
  360.         MUIA_HelpNode, "SIGN_FILE",
  361.         MUIA_Group_Columns, 1,
  362.         Child, ObjectApp->BT_Sign_DOIT,
  363.     End;
  364.  
  365.     GR_Sign = GroupObject,
  366.         MUIA_HelpNode, "Sign_Group",
  367.         MUIA_Frame, MUIV_Frame_Group,
  368.         MUIA_FrameTitle, "File Signing",
  369.         Child, ObjectApp->CY_Sign_DETACH,
  370.         Child, ObjectApp->CY_Sign_MODE,
  371.         Child, ObjectApp->CY_Sign_TEXTMODE,
  372.         Child, ObjectApp->CY_Sign_CLIP,
  373.         Child, ObjectApp->GR_Sig_File,
  374.         Child, GR_Sign_DOIT,
  375.     End;
  376.  
  377.     ObjectApp->CY_KeysAdd_CLIP = CycleObject,
  378.         MUIA_ObjectID, 30,
  379.         MUIA_HelpNode, "KeysAdd_CLIP",
  380.         MUIA_Cycle_Entries, ObjectApp->CY_KeysAdd_CLIPContent,
  381.     End;
  382.  
  383.     ObjectApp->STR_PA_Keys_ADD_KEYFILE = StringObject,
  384.         MUIA_ObjectID, 36,
  385.         MUIA_Frame, MUIV_Frame_String,
  386.         MUIA_HelpNode, "ADD_KEYFILE",
  387.         MUIA_String_MaxLen, 256,
  388.     End;
  389.  
  390.     ObjectApp->IM_Pop_Keys_AddFile = ImageObject,
  391.         MUIA_Image_Spec, 19,
  392.         MUIA_InputMode, MUIV_InputMode_RelVerify,
  393.         MUIA_Weight, 0,
  394.         MUIA_Frame, MUIV_Frame_ImageButton,
  395.         MUIA_Image_FreeVert, TRUE,
  396.         MUIA_Image_FreeHoriz, TRUE,
  397.         MUIA_FixHeight, 10,
  398.         MUIA_FixWidth, 8,
  399.         MUIA_HelpNode, "Pop_ASLFile",
  400.     End;
  401.  
  402.     ObjectApp->GR_Keys_AddFile = GroupObject,
  403.         MUIA_Group_Columns, 2,
  404.         Child, ObjectApp->STR_PA_Keys_ADD_KEYFILE,
  405.         Child, ObjectApp->IM_Pop_Keys_AddFile,
  406.     End;
  407.  
  408.     REC_Keys_Add1 = RectangleObject,
  409.         MUIA_Rectangle_HBar, TRUE,
  410.         MUIA_FixHeight, 8,
  411.     End;
  412.  
  413.     ObjectApp->BT_Keys_ADD_KEYADD = SimpleButton("Add Key(s) To Keyring!");
  414.  
  415.     GR_KEYADD = GroupObject,
  416.         MUIA_HelpNode, "ADD_KEYS",
  417.         MUIA_Group_Columns, 1,
  418.         Child, ObjectApp->BT_Keys_ADD_KEYADD,
  419.     End;
  420.  
  421.     GR_Keys_ADD = GroupObject,
  422.         MUIA_HelpNode, "Keys_ADD",
  423.         MUIA_Frame, MUIV_Frame_Group,
  424.         MUIA_FrameTitle, "Add Key(s) From Source",
  425.         Child, ObjectApp->CY_KeysAdd_CLIP,
  426.         Child, ObjectApp->GR_Keys_AddFile,
  427.         Child, REC_Keys_Add1,
  428.         Child, GR_KEYADD,
  429.     End;
  430.  
  431.     ObjectApp->BT_Keys_EDIT_KEYCHECK = SimpleButton("Check Key(s)");
  432.  
  433.     GR_KEYCHECK = GroupObject,
  434.         MUIA_HelpNode, "ED_KEYCHECK",
  435.         MUIA_Group_Columns, 1,
  436.         Child, ObjectApp->BT_Keys_EDIT_KEYCHECK,
  437.     End;
  438.  
  439.     ObjectApp->BT_Keys_EDIT_KEYDISABLE = SimpleButton("(En/Dis)able Key");
  440.  
  441.     GR_KEYDISABLE = GroupObject,
  442.         MUIA_HelpNode, "ED_KEYDISABLE",
  443.         MUIA_Group_Columns, 1,
  444.         Child, ObjectApp->BT_Keys_EDIT_KEYDISABLE,
  445.     End;
  446.  
  447.     ObjectApp->BT_Keys_EDIT_KEYEDIT = SimpleButton("Edit A Key");
  448.  
  449.     GR_KEYEDIT = GroupObject,
  450.         MUIA_HelpNode, "ED_KEYEDIT",
  451.         MUIA_Group_Columns, 1,
  452.         Child, ObjectApp->BT_Keys_EDIT_KEYEDIT,
  453.     End;
  454.  
  455.     ObjectApp->BT_Keys_EDIT_KEYREMOVE = SimpleButton("Remove A Key");
  456.  
  457.     GR_KEYREMOVE = GroupObject,
  458.         MUIA_HelpNode, "ED_KEYREMOVE",
  459.         MUIA_Group_Columns, 1,
  460.         Child, ObjectApp->BT_Keys_EDIT_KEYREMOVE,
  461.     End;
  462.  
  463.     ObjectApp->BT_Keys_EDIT_REMOVESIG = SimpleButton("Remove Signature");
  464.  
  465.     GR_REMOVESIG = GroupObject,
  466.         MUIA_HelpNode, "ED_REMOVESIG",
  467.         MUIA_Group_Columns, 1,
  468.         Child, ObjectApp->BT_Keys_EDIT_REMOVESIG,
  469.     End;
  470.  
  471.     ObjectApp->BT_Keys_EDIT_REMOVEUID = SimpleButton("Remove User ID");
  472.  
  473.     GR_REMOVEUID = GroupObject,
  474.         MUIA_HelpNode, "ED_REMOVEUID",
  475.         MUIA_Group_Columns, 1,
  476.         Child, ObjectApp->BT_Keys_EDIT_REMOVEUID,
  477.     End;
  478.  
  479.     ObjectApp->BT_Keys_EDIT_KEYREVOKE = SimpleButton("Revoke A Key");
  480.  
  481.     GR_KEYREVOKE = GroupObject,
  482.         MUIA_HelpNode, "ED_KEYREVOKE",
  483.         MUIA_Group_Columns, 1,
  484.         Child, ObjectApp->BT_Keys_EDIT_KEYREVOKE,
  485.     End;
  486.  
  487.     ObjectApp->BT_Keys_EDIT_KEYREVSIG = SimpleButton("Revoke Signature");
  488.  
  489.     GR_KEYREVSIG = GroupObject,
  490.         MUIA_HelpNode, "ED_KEYREVSIG",
  491.         MUIA_Group_Columns, 1,
  492.         Child, ObjectApp->BT_Keys_EDIT_KEYREVSIG,
  493.     End;
  494.  
  495.     ObjectApp->BT_Keys_EDIT_KEYSIGN = SimpleButton(  "Sign A Key");
  496.  
  497.     GR_KEYSIGN = GroupObject,
  498.         MUIA_HelpNode, "ED_KEYSIGN",
  499.         MUIA_Group_Columns, 1,
  500.         Child, ObjectApp->BT_Keys_EDIT_KEYSIGN,
  501.     End;
  502.  
  503.     ObjectApp->BT_Keys_EDIT_KEYSIGNKEY = SimpleButton(  "Sign A Key Using...");
  504.  
  505.     GR_KEYSIGNKEY = GroupObject,
  506.         MUIA_HelpNode, "ED_KEYSIGNKEY",
  507.         MUIA_Group_Columns, 1,
  508.         Child, ObjectApp->BT_Keys_EDIT_KEYSIGNKEY,
  509.     End;
  510.  
  511.     GR_Keys_EDIT = GroupObject,
  512.         MUIA_HelpNode, "Keys_EDIT",
  513.         MUIA_Frame, MUIV_Frame_Group,
  514.         MUIA_FrameTitle, "Key Editing Functions",
  515.         MUIA_Group_Rows, 5,
  516.         Child, GR_KEYCHECK,
  517.         Child, GR_KEYDISABLE,
  518.         Child, GR_KEYEDIT,
  519.         Child, GR_KEYREMOVE,
  520.         Child, GR_REMOVESIG,
  521.         Child, GR_REMOVEUID,
  522.         Child, GR_KEYREVOKE,
  523.         Child, GR_KEYREVSIG,
  524.         Child, GR_KEYSIGN,
  525.         Child, GR_KEYSIGNKEY,
  526.     End;
  527.  
  528.     ObjectApp->BT_Keys_MISC_KEYGEN = SimpleButton("Generate Key Pair");
  529.  
  530.     GR_KEYGEN = GroupObject,
  531.         MUIA_HelpNode, "MISC_KEYGEN",
  532.         MUIA_Group_Columns, 1,
  533.         Child, ObjectApp->BT_Keys_MISC_KEYGEN,
  534.     End;
  535.  
  536.     ObjectApp->BT_Keys_MISC_KEYEXTRACT = SimpleButton("Extract Key(s) To File");
  537.  
  538.     GR_KEYEXTRACT = GroupObject,
  539.         MUIA_HelpNode, "MISC_KEYEXTRACT",
  540.         MUIA_Group_Columns, 1,
  541.         Child, ObjectApp->BT_Keys_MISC_KEYEXTRACT,
  542.     End;
  543.  
  544.     ObjectApp->BT_Keys_MISC_KEYLIST = SimpleButton("List Key(s)");
  545.  
  546.     GR_KEYLIST = GroupObject,
  547.         MUIA_HelpNode, "MISC_KEYLIST",
  548.         MUIA_Group_Columns, 1,
  549.         Child, ObjectApp->BT_Keys_MISC_KEYLIST,
  550.     End;
  551.  
  552.     ObjectApp->BT_Keys_MISC_KEYLIST_UPDATE = SimpleButton("Update Key Lister");
  553.  
  554.     GR_KEYLIST_UPDATE = GroupObject,
  555.         MUIA_HelpNode, "MISC_KEYLIST_UPDATE",
  556.         MUIA_Group_Columns, 1,
  557.         Child, ObjectApp->BT_Keys_MISC_KEYLIST_UPDATE,
  558.     End;
  559.  
  560.     GR_Keys_MISC = GroupObject,
  561.         MUIA_HelpNode, "Keys_MISC",
  562.         MUIA_Frame, MUIV_Frame_Group,
  563.         MUIA_FrameTitle, "Miscellaneous Key Functions",
  564.         MUIA_Group_Rows, 4,
  565.         Child, GR_KEYGEN,
  566.         Child, GR_KEYEXTRACT,
  567.         Child, GR_KEYLIST,
  568.         Child, GR_KEYLIST_UPDATE,
  569.     End;
  570.  
  571.     ObjectApp->GR_Keys = RegisterObject,
  572.         MUIA_Register_Titles, ObjectApp->STR_GR_Keys,
  573.         MUIA_Frame, MUIV_Frame_Group,
  574.         MUIA_FrameTitle, "PGP5 Key Functions",
  575.         Child, GR_Keys_ADD,
  576.         Child, GR_Keys_EDIT,
  577.         Child, GR_Keys_MISC,
  578.     End;
  579.  
  580.     ObjectApp->GR_Functions = RegisterObject,
  581.         MUIA_Register_Titles, ObjectApp->STR_GR_Functions,
  582.         MUIA_Frame, MUIV_Frame_Group,
  583.         Child, GR_Encrypt,
  584.         Child, GR_Decrypt,
  585.         Child, GR_Sign,
  586.         Child, ObjectApp->GR_Keys,
  587.     End;
  588.  
  589.     ObjectApp->TX_Status = TextObject,
  590.         MUIA_HelpNode, "TX_Status",
  591.         MUIA_Background, MUII_TextBack,
  592.         MUIA_Frame, MUIV_Frame_Text,
  593.         MUIA_Text_Contents, ObjectApp->STR_TX_Status,
  594.         MUIA_Text_SetMin, FALSE,
  595.     End;
  596.  
  597.     ObjectApp->GR_Status = GroupObject,
  598.         MUIA_Frame, MUIV_Frame_Group,
  599.         MUIA_FrameTitle, "Status",
  600.         Child, ObjectApp->TX_Status,
  601.     End;
  602.  
  603.     GROUP_PGP5GUI = GroupObject,
  604.         Child, ObjectApp->GR_Status,
  605.         Child, ObjectApp->GR_Functions,
  606.     End;
  607.  
  608.     ObjectApp->WI_Main = WindowObject,
  609.         MUIA_Window_Title, "GUI for Amiga PGP 5...",
  610.         MUIA_Window_ID, MAKE_ID('W', 'I', 'N', '1'),
  611.         MUIA_Window_AppWindow, TRUE,
  612.         MUIA_Window_NoMenus, TRUE,
  613.         WindowContents, GROUP_PGP5GUI,
  614.     End;
  615.  
  616.     ObjectApp->App = ApplicationObject,
  617.         MUIA_Application_Author, "(C) Stefan Zakarias",
  618.         MUIA_Application_Base, "PGP5GUI",
  619.         MUIA_Application_Title, "PGP5GUI",
  620.         MUIA_Application_Version, "$VER: PGP5GUI v1.7.4 ßeta (14.5.98)",
  621.         MUIA_Application_HelpFile, "PGP:PGP5GUI.guide",
  622.         SubWindow, ObjectApp->WI_Main,
  623.     End;
  624.  
  625.     if (!ObjectApp->App)
  626.     {
  627.         FreeVec(ObjectApp);
  628.         return(NULL);
  629.     }
  630.  
  631.     DoMethod(ObjectApp->WI_Main,
  632.         MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
  633.         ObjectApp->App,
  634.         2,
  635.         MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit
  636.         );
  637.  
  638.     DoMethod(ObjectApp->CY_Encrypt_CLIP,
  639.         MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime,
  640.         ObjectApp->App,
  641.         2,
  642.         MUIM_Application_ReturnID, Enc_FILE_CLIP
  643.         );
  644.  
  645.     DoMethod(ObjectApp->GR_Enc_File,
  646.         MUIM_Notify, MUIA_AppMessage, MUIV_EveryTime,
  647.         ObjectApp->STR_PA_Encrypt_FROMFILE,
  648.         3,
  649.         MUIM_CallHook, &AppMsgHook, MUIV_TriggerValue
  650.         );
  651.  
  652.     DoMethod(ObjectApp->IM_Pop_Enc,
  653.         MUIM_Notify, MUIA_Pressed, FALSE,
  654.         ObjectApp->App,
  655.         2,
  656.         MUIM_Application_ReturnID, Pop_Enc_File
  657.         );
  658.  
  659.     DoMethod(ObjectApp->BT_Encrypt_DOIT,
  660.         MUIM_Notify, MUIA_Pressed, FALSE,
  661.         ObjectApp->App,
  662.         2,
  663.         MUIM_Application_ReturnID, Encrypt_DOIT
  664.         );
  665.  
  666.     DoMethod(ObjectApp->CY_Decrypt_OUTTYPE,
  667.         MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime,
  668.         ObjectApp->App,
  669.         2,
  670.         MUIM_Application_ReturnID, Decrypt_OUTTYPE
  671.         );
  672.  
  673.     DoMethod(ObjectApp->GR_Dec_File,
  674.         MUIM_Notify, MUIA_AppMessage, MUIV_EveryTime,
  675.         ObjectApp->STR_PA_Decrypt_TOFILE,
  676.         3,
  677.         MUIM_CallHook, &AppMsgHook, MUIV_TriggerValue
  678.         );
  679.  
  680.     DoMethod(ObjectApp->IM_Pop_Dec,
  681.         MUIM_Notify, MUIA_Pressed, FALSE,
  682.         ObjectApp->App,
  683.         2,
  684.         MUIM_Application_ReturnID, Pop_Dec_File
  685.         );
  686.  
  687.     DoMethod(ObjectApp->BT_Decrypt_DOIT,
  688.         MUIM_Notify, MUIA_Pressed, FALSE,
  689.         ObjectApp->App,
  690.         2,
  691.         MUIM_Application_ReturnID, Decrypt_DOIT
  692.         );
  693.  
  694.     DoMethod(ObjectApp->CY_Sign_CLIP,
  695.         MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime,
  696.         ObjectApp->App,
  697.         2,
  698.         MUIM_Application_ReturnID, Sig_FILE_CLIP
  699.         );
  700.  
  701.     DoMethod(ObjectApp->GR_Sig_File,
  702.         MUIM_Notify, MUIA_AppMessage, MUIV_EveryTime,
  703.         ObjectApp->STR_PA_Sign_POPFILE,
  704.         3,
  705.         MUIM_CallHook, &AppMsgHook, MUIV_TriggerValue
  706.         );
  707.  
  708.     DoMethod(ObjectApp->IM_Pop_Sig,
  709.         MUIM_Notify, MUIA_Pressed, FALSE,
  710.         ObjectApp->App,
  711.         2,
  712.         MUIM_Application_ReturnID, Pop_Sig_File
  713.         );
  714.  
  715.     DoMethod(ObjectApp->BT_Sign_DOIT,
  716.         MUIM_Notify, MUIA_Pressed, FALSE,
  717.         ObjectApp->App,
  718.         2,
  719.         MUIM_Application_ReturnID, Sign_DOIT
  720.         );
  721.  
  722.     DoMethod(ObjectApp->CY_KeysAdd_CLIP,
  723.         MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime,
  724.         ObjectApp->App,
  725.         2,
  726.         MUIM_Application_ReturnID, AddKeys_FILE_CLIP
  727.         );
  728.  
  729.     DoMethod(ObjectApp->GR_Keys_AddFile,
  730.         MUIM_Notify, MUIA_AppMessage, MUIV_EveryTime,
  731.         ObjectApp->STR_PA_Keys_ADD_KEYFILE,
  732.         3,
  733.         MUIM_CallHook, &AppMsgHook, MUIV_TriggerValue
  734.         );
  735.  
  736.     DoMethod(ObjectApp->IM_Pop_Keys_AddFile,
  737.         MUIM_Notify, MUIA_Pressed, FALSE,
  738.         ObjectApp->App,
  739.         2,
  740.         MUIM_Application_ReturnID, Pop_Keys_AddFile
  741.         );
  742.  
  743.     DoMethod(ObjectApp->BT_Keys_ADD_KEYADD,
  744.         MUIM_Notify, MUIA_Pressed, FALSE,
  745.         ObjectApp->App,
  746.         2,
  747.         MUIM_Application_ReturnID, ADD_KEYADD
  748.         );
  749.  
  750.     DoMethod(ObjectApp->BT_Keys_EDIT_KEYCHECK,
  751.         MUIM_Notify, MUIA_Pressed, FALSE,
  752.         ObjectApp->App,
  753.         2,
  754.         MUIM_Application_ReturnID, EDIT_KEYCHECK
  755.         );
  756.  
  757.     DoMethod(ObjectApp->BT_Keys_EDIT_KEYDISABLE,
  758.         MUIM_Notify, MUIA_Pressed, FALSE,
  759.         ObjectApp->App,
  760.         2,
  761.         MUIM_Application_ReturnID, EDIT_KEYDISABLE
  762.         );
  763.  
  764.     DoMethod(ObjectApp->BT_Keys_EDIT_KEYEDIT,
  765.         MUIM_Notify, MUIA_Pressed, FALSE,
  766.         ObjectApp->App,
  767.         2,
  768.         MUIM_Application_ReturnID, EDIT_KEYEDIT
  769.         );
  770.  
  771.     DoMethod(ObjectApp->BT_Keys_EDIT_KEYREMOVE,
  772.         MUIM_Notify, MUIA_Pressed, FALSE,
  773.         ObjectApp->App,
  774.         2,
  775.         MUIM_Application_ReturnID, EDIT_KEYREMKEY
  776.         );
  777.  
  778.     DoMethod(ObjectApp->BT_Keys_EDIT_REMOVESIG,
  779.         MUIM_Notify, MUIA_Pressed, FALSE,
  780.         ObjectApp->App,
  781.         2,
  782.         MUIM_Application_ReturnID, EDIT_KEYREMSIG
  783.         );
  784.  
  785.     DoMethod(ObjectApp->BT_Keys_EDIT_REMOVEUID,
  786.         MUIM_Notify, MUIA_Pressed, FALSE,
  787.         ObjectApp->App,
  788.         2,
  789.         MUIM_Application_ReturnID, EDIT_KEYREMUID
  790.         );
  791.  
  792.     DoMethod(ObjectApp->BT_Keys_EDIT_KEYREVOKE,
  793.         MUIM_Notify, MUIA_Pressed, FALSE,
  794.         ObjectApp->App,
  795.         2,
  796.         MUIM_Application_ReturnID, EDIT_KEYREVOKE
  797.         );
  798.  
  799.     DoMethod(ObjectApp->BT_Keys_EDIT_KEYREVSIG,
  800.         MUIM_Notify, MUIA_Pressed, FALSE,
  801.         ObjectApp->App,
  802.         2,
  803.         MUIM_Application_ReturnID, EDIT_KEYREVSIG
  804.         );
  805.  
  806.     DoMethod(ObjectApp->BT_Keys_EDIT_KEYSIGN,
  807.         MUIM_Notify, MUIA_Pressed, FALSE,
  808.         ObjectApp->App,
  809.         2,
  810.         MUIM_Application_ReturnID, EDIT_KEYSIGN
  811.         );
  812.  
  813.     DoMethod(ObjectApp->BT_Keys_EDIT_KEYSIGNKEY,
  814.         MUIM_Notify, MUIA_Pressed, FALSE,
  815.         ObjectApp->App,
  816.         2,
  817.         MUIM_Application_ReturnID, EDIT_KEYSIGNKEY
  818.         );
  819.  
  820.     DoMethod(ObjectApp->BT_Keys_MISC_KEYGEN,
  821.         MUIM_Notify, MUIA_Pressed, FALSE,
  822.         ObjectApp->App,
  823.         2,
  824.         MUIM_Application_ReturnID, MISC_KEYGEN
  825.         );
  826.  
  827.     DoMethod(ObjectApp->BT_Keys_MISC_KEYEXTRACT,
  828.         MUIM_Notify, MUIA_Pressed, FALSE,
  829.         ObjectApp->App,
  830.         2,
  831.         MUIM_Application_ReturnID, MISC_KEYEXTRACT
  832.         );
  833.  
  834.     DoMethod(ObjectApp->BT_Keys_MISC_KEYLIST,
  835.         MUIM_Notify, MUIA_Pressed, FALSE,
  836.         ObjectApp->App,
  837.         2,
  838.         MUIM_Application_ReturnID, MISC_KEYLIST
  839.         );
  840.  
  841.     DoMethod(ObjectApp->BT_Keys_MISC_KEYLIST_UPDATE,
  842.         MUIM_Notify, MUIA_Pressed, FALSE,
  843.         ObjectApp->App,
  844.         2,
  845.         MUIM_Application_ReturnID, MISC_KEYLIST_UPDATE
  846.         );
  847.  
  848.     DoMethod(ObjectApp->WI_Main,
  849.         MUIM_Window_SetCycleChain, ObjectApp->GR_Functions,
  850.         ObjectApp->CY_Encrypt_MODE,
  851.         ObjectApp->CY_Encrypt_USEARMOR,
  852.         ObjectApp->CY_Encrypt_TEXTMODE,
  853.         ObjectApp->CY_Encrypt_CLIP,
  854.         ObjectApp->STR_PA_Encrypt_FROMFILE,
  855.         ObjectApp->IM_Pop_Enc,
  856.         ObjectApp->BT_Encrypt_DOIT,
  857.         ObjectApp->CY_Decrypt_OUTTYPE,
  858.         ObjectApp->STR_PA_Decrypt_TOFILE,
  859.         ObjectApp->IM_Pop_Dec,
  860.         ObjectApp->BT_Decrypt_DOIT,
  861.         ObjectApp->CY_Sign_DETACH,
  862.         ObjectApp->CY_Sign_MODE,
  863.         ObjectApp->CY_Sign_TEXTMODE,
  864.         ObjectApp->CY_Sign_CLIP,
  865.         ObjectApp->STR_PA_Sign_POPFILE,
  866.         ObjectApp->IM_Pop_Sig,
  867.         ObjectApp->BT_Sign_DOIT,
  868.         ObjectApp->GR_Keys,
  869.         ObjectApp->CY_KeysAdd_CLIP,
  870.         ObjectApp->STR_PA_Keys_ADD_KEYFILE,
  871.         ObjectApp->IM_Pop_Keys_AddFile,
  872.         ObjectApp->BT_Keys_ADD_KEYADD,
  873.         ObjectApp->BT_Keys_EDIT_KEYCHECK,
  874.         ObjectApp->BT_Keys_EDIT_KEYDISABLE,
  875.         ObjectApp->BT_Keys_EDIT_KEYEDIT,
  876.         ObjectApp->BT_Keys_EDIT_KEYREMOVE,
  877.         ObjectApp->BT_Keys_EDIT_REMOVESIG,
  878.         ObjectApp->BT_Keys_EDIT_REMOVEUID,
  879.         ObjectApp->BT_Keys_EDIT_KEYREVOKE,
  880.         ObjectApp->BT_Keys_EDIT_KEYREVSIG,
  881.         ObjectApp->BT_Keys_EDIT_KEYSIGN,
  882.         ObjectApp->BT_Keys_EDIT_KEYSIGNKEY,
  883.         ObjectApp->BT_Keys_MISC_KEYGEN,
  884.         ObjectApp->BT_Keys_MISC_KEYEXTRACT,
  885.         ObjectApp->BT_Keys_MISC_KEYLIST,
  886.         ObjectApp->BT_Keys_MISC_KEYLIST_UPDATE,
  887.         0
  888.         );
  889.  
  890.     DoMethod(ObjectApp->App, MUIM_Application_Load, MUIV_Application_Load_ENVARC);
  891.  
  892.     /* Get cycle gadget settings */
  893.     prev_EncClipMode = GetCycle(ObjectApp->CY_Encrypt_CLIP);
  894.     prev_DecClipMode = GetCycle(ObjectApp->CY_Decrypt_OUTTYPE);
  895.     prev_SigClipMode = GetCycle(ObjectApp->CY_Sign_CLIP);
  896.     prev_AddKeysClipMode = GetCycle(ObjectApp->CY_KeysAdd_CLIP);
  897.  
  898.     /* Ghost out gadgets if necessary */
  899.     if (prev_EncClipMode == 1)
  900.     {
  901.         /* Encrypt from file to clipboard - Disable USEARMOR and TEXTMODE */
  902.         DoMethod(ObjectApp->CY_Encrypt_CLIP, MUIM_MultiSet, MUIA_Disabled, TRUE,
  903.                 ObjectApp->CY_Encrypt_USEARMOR,    ObjectApp->CY_Encrypt_TEXTMODE,
  904.                 NULL);
  905.     }
  906.     else
  907.     {
  908.         if (prev_EncClipMode >= 2)
  909.         {
  910.             /*
  911.             ** Encrypt from clipboard - Turn off file name group
  912.             ** and disable USEARMOR and TEXTMODE
  913.             */
  914.             DoMethod(ObjectApp->CY_Encrypt_CLIP, MUIM_MultiSet, MUIA_Disabled, TRUE,
  915.                     ObjectApp->GR_Enc_File, ObjectApp->CY_Encrypt_USEARMOR,
  916.                     ObjectApp->CY_Encrypt_TEXTMODE,    NULL);
  917.         }
  918.     }
  919.  
  920.     if (prev_DecClipMode >= 3)
  921.     {
  922.         /* Output to clipboard - Turn off file name group */
  923.         set(ObjectApp->GR_Dec_File, MUIA_Disabled, TRUE);
  924.     }
  925.  
  926.     if (prev_SigClipMode == 1)
  927.     {
  928.         /*
  929.         ** Sign from file to clipboard - Disable DETACH, USEARMOR and TEXTMODE
  930.         */
  931.         DoMethod(ObjectApp->CY_Sign_CLIP, MUIM_MultiSet, MUIA_Disabled, TRUE,
  932.                 ObjectApp->CY_Sign_DETACH, ObjectApp->CY_Sign_MODE,
  933.                 ObjectApp->CY_Sign_TEXTMODE, NULL);
  934.     }
  935.     else
  936.     {
  937.         if (prev_SigClipMode >= 2)
  938.         {
  939.             /*
  940.             ** Sign from clipboard - Turn off file name group
  941.             ** and disable DETACH, USEARMOR and TEXTMODE
  942.             */
  943.             DoMethod(ObjectApp->CY_Sign_CLIP, MUIM_MultiSet, MUIA_Disabled, TRUE,
  944.                     ObjectApp->GR_Sig_File, ObjectApp->CY_Sign_DETACH,
  945.                     ObjectApp->CY_Sign_MODE, ObjectApp->CY_Sign_TEXTMODE, NULL);
  946.         }
  947.     }
  948.  
  949.     if (prev_AddKeysClipMode == 1)
  950.     {
  951.         /*
  952.         ** Output to clipboard - Turn off file name group
  953.         */
  954.         set(ObjectApp->GR_Keys_AddFile, MUIA_Disabled, TRUE);
  955.     }
  956.  
  957.     /* Open the main window */
  958.     set(ObjectApp->WI_Main, MUIA_Window_Open, TRUE);
  959.  
  960.     return(ObjectApp);
  961. }
  962.  
  963. /*
  964. ** Shutdown the main application and clean up some resources used by it.
  965. */
  966. void DisposeApp(struct ObjApp *ObjectApp)
  967. {
  968.     /* Save window, gadget settings, etc. */
  969.     DoMethod(ObjectApp->App, MUIM_Application_Save, MUIV_Application_Save_ENVARC);
  970.  
  971.     /* Tell MUI to forget about it */
  972.     MUI_DisposeObject(ObjectApp->App);
  973.  
  974.     /* Free the memory used by the structure */
  975.     FreeVec(ObjectApp);
  976. }
  977.